package me.abhiseshan.streamingtest; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.UnknownHostException; import android.app.Activity; import android.content.Intent; import android.media.AudioFormat; import android.media.AudioRecord; import android.media.MediaRecorder; import android.media.audiofx.AcousticEchoCanceler; import android.media.audiofx.NoiseSuppressor; import android.media.audiofx.AutomaticGainControl; import android.os.Build; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.ImageView; public class RecorderActivity extends Activity { public static String IP; //public byte[] buffer; //public static DatagramSocket socket; private int port=50005; AudioRecord recorder; Boolean isAvailable = false; private int sampleRate = 16000; // 44100 for music private int channelConfig = AudioFormat.CHANNEL_IN_MONO; private int audioFormat = AudioFormat.ENCODING_AC3; int minBufSize = AudioRecord.getMinBufferSize(sampleRate, channelConfig, AudioFormat.ENCODING_PCM_16BIT); //audioFormat private boolean status = true; @Override public void onCreate(Bundle savedInstanceState) { Log.e("VS", "minBuff " +minBufSize); minBufSize=1100; Log.e("VS", "minBuff " +minBufSize); Log.e("VS", "8bit " +AudioFormat.ENCODING_PCM_8BIT); Log.e("VS", "16bit " +AudioFormat.ENCODING_PCM_16BIT); Log.e("VS", "ac3 " + AudioFormat.ENCODING_AC3); super.onCreate(savedInstanceState); setContentView(R.layout.activity_recorder); Intent intent = getIntent(); IP = intent.getStringExtra("IP"); //Button startButton = (Button) findViewById (R.id.start_button); //Button stopButton = (Button) findViewById (R.id.stop_button); ImageView start= (ImageView) findViewById(R.id.offMic); ImageView stop= (ImageView) findViewById(R.id.onMic); stop.setVisibility(View.INVISIBLE); start.setVisibility(View.VISIBLE); start.setOnClickListener(startListener); //startButton.setOnClickListener(startListener); // stopButton.setOnClickListener(stopListener); if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) isAvailable = AcousticEchoCanceler.isAvailable(); } private final OnClickListener stopListener = new OnClickListener() { @Override public void onClick(View arg0) { ImageView start= (ImageView) findViewById(R.id.offMic); ImageView stop= (ImageView) findViewById(R.id.onMic); stop.setVisibility(View.INVISIBLE); start.setVisibility(View.VISIBLE); status = false; recorder.release(); start.setOnClickListener(startListener); Log.d("VS","Kraken released"); } }; private final OnClickListener startListener = new OnClickListener() { @Override public void onClick(View arg0) { ImageView start= (ImageView) findViewById(R.id.offMic); ImageView stop= (ImageView) findViewById(R.id.onMic); stop.setVisibility(View.VISIBLE); start.setVisibility(View.INVISIBLE); status = true; startStreaming(); stop.setOnClickListener(stopListener); } }; public void startStreaming() { Thread streamThread = new Thread(new Runnable() { @Override public void run() { try { final DatagramSocket socket = new DatagramSocket(); Log.d("VS", "Socket Created"); final byte[] buffer = new byte[minBufSize]; Log.d("VS","Buffer created of size " + minBufSize); Log.d("IP Add", IP); final InetAddress destination = InetAddress.getByName(IP.trim()); Log.d("VS", "Address retrieved"); //recorder= new AudioRecord() recorder = new AudioRecord(MediaRecorder.AudioSource.MIC,sampleRate,channelConfig,AudioFormat.ENCODING_PCM_16BIT,minBufSize*10); //audioFormat Log.d("VS", "Recorder initialized"); if (isAvailable) Log.d("Acoustic Echo Canceller", "Acoustic Echo Canceller is enabled"); if (isAvailable && android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { AcousticEchoCanceler.create(recorder.getAudioSessionId()); NoiseSuppressor.create(recorder.getAudioSessionId()); AutomaticGainControl.create(recorder.getAudioSessionId()); } recorder.startRecording(); Thread sendThread= new Thread (new Runnable() { @Override public void run() { while(status) { final DatagramPacket packet; //reading data from MIC into buffer minBufSize = recorder.read(buffer, 0, buffer.length); //putting buffer in the packet packet = new DatagramPacket(buffer, buffer.length, destination, port); try { socket.send(packet); } catch(IOException e){ Log.e("VS", "IOException"); } System.out.println("MinBufferSize: " + minBufSize); } } }); sendThread.run(); } catch(UnknownHostException e) { Log.e("VS", "UnknownHostException"); } catch (IOException e) { e.printStackTrace(); Log.e("VS", "IOException"); } } }); streamThread.start(); } }